/*
 Problem Description
某核反应堆有两类事件发生：
高能质点碰击核子时，质点被吸收，放出3个高能质点和1个低能质点；
低能质点碰击核子时，质点被吸收，放出2个高能质点和1个低能质点。
假定开始的时候（0微秒）只有一个高能质点射入核反应堆，每一微秒引起一个事件发生(对于一个事件，当前存在的所有质点都会撞击核子)，试确定n微秒时高能质点和低能质点的数目。

 

Input
输入含有一些整数n(0≤n≤33)，以微秒为单位，若n为-1表示处理结束。

 

Output
分别输出n微秒时刻高能质点和低能质点的数量，高能质点与低能质点数量之间以逗号空格分隔。每个输出占一行。

 

Sample Input
5 2
-1
 

Sample Output
571, 209
11, 4



提示
可以使用long long int对付GNU C++，使用__int64对付VC6
-------------------------------------------------------------------
解题思路：
x：高能质点 y：低能质点
f(0):x = 1, y = 0;
f(1):x = 1*3, y = 0+1
f(2):x = 3*3+1*2, y = 3+1
f(n):x = f(n-1):x*3+f(n-1):y*2,f(n):y = f(n-1):x + f(n-1):y
 */
package com.yuan.algorithms.acm201504;

import java.util.Scanner;

public class HD2085核反应堆 {

	public static void main(String[] args) {
		long[][] arr = new long[34][2];
		arr[0][0] = 1;//高能质点
		arr[0][1] = 0;//低能质点
		for (int i = 1; i < arr.length; i++) {
			arr[i][0] = arr[i - 1][0] * 3 + arr[i - 1][1] * 2;
			arr[i][1] = arr[i-1][0] + arr[i-1][1];
		}
		Scanner sc = new Scanner(System.in);
		while(sc.hasNext()) {
			int n = sc.nextInt();
			if (n==-1) {
				break;
			}
			System.out.println(arr[n][0]+", "+arr[n][1]);
		}
	}

}
